package com.bawei.mall.product.mapper;

import java.util.List;

import com.bawei.mall.product.domain.MallProductAddrInfo;
import com.bawei.mall.product.domain.MallProductInfo;
import com.bawei.mall.product.domain.MallProductInfoNew;
import com.bawei.mall.product.domain.MallProductUserInfo;
import com.bawei.mall.product.domain.model.ProductModel;
import org.apache.ibatis.annotations.Param;

/**
 * 商品信息Mapper接口
 *
 * @author DongZeLiang
 * @date 2022-09-19
 */
public interface MallProductInfoMapper
{
    /**
     * 查询商品信息
     *
     * @param id 商品信息主键
     * @return 商品信息
     */
    public MallProductInfo selectMallProductInfoById(@Param("id")Long id);

    public ProductModel selectProductModelById(@Param("id") Long id);

    /**
     * 查询商品信息列表
     *
     * @param mallProductInfo 商品信息
     * @return 商品信息集合
     */
    public List<MallProductInfo> selectMallProductInfoList(MallProductInfo mallProductInfo);

    /**
     * 新增商品信息
     *
     * @param mallProductInfo 商品信息
     * @return 结果
     */
    public int insertMallProductInfo(MallProductInfo mallProductInfo);

    /**
     * 修改商品信息
     *
     * @param mallProductInfo 商品信息
     * @return 结果
     */
    public int updateMallProductInfo(MallProductInfo mallProductInfo);

    /**
     * 删除商品信息
     *
     * @param id 商品信息主键
     * @return 结果
     */
    public int deleteMallProductInfoById(Long id);

    /**
     * 批量删除商品信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMallProductInfoByIds(Long[] ids);

    /**
     * 商品总条数
     * @param mallProductInfo 商品查询条件
     * @return
     */
    Long selectMallProductInfoCount (MallProductInfo mallProductInfo);


    int updStatus(MallProductInfo mallProductInfo);


    void uploadInfo(@Param("id") Long id, @Param("updstatus") int updstatus);

    /**
     * 猜你喜欢
     * @return
     */
    List<MallProductInfoNew> guessYouLike(Integer pageNum, Integer pageSize);

    /**
     * 根据品牌ID查询商品
     * @param brandId
     * @return
     */
    List<MallProductInfoNew> productInfoByBrandId(@Param("brandId") Integer brandId);


    /**
     * 查询用户有没有收藏这个品牌
     *
     * @param brandId
     * @param id
     * @return
     */
    MallProductUserInfo selectMallProductUserInfo(@Param("brandId") Integer brandId, @Param("id") Integer id);

    /**
     * 添加收藏
     * @param mallProductUserInfo
     */
    void addCollection(MallProductUserInfo mallProductUserInfo);

    /**
     * 取消收藏
     * @param brandId
     * @param id
     */
    void deleteCollection(@Param("brandId") Integer brandId, @Param("id") Integer id);

    /**
     * 查询地址列表
     * @return
     */
    List<MallProductAddrInfo> fetchAddressList(@Param("id") Integer id);


    /**
     * 添加地址
     * @param mallProductAddrInfo
     */
    void addAddress(MallProductAddrInfo mallProductAddrInfo);

    /**
     * 根据商品ID查询商品详情（新实体类）
     * @param id
     * @return
     */
    MallProductInfoNew selectMallProductInfoNewById(@Param("id") Long id);


    /**
     * 查询关注列表
     * @param pageNum
     * @param pageSize
     * @param id
     * @return
     */
    List<MallProductUserInfo> selectMallProductUserInfoList(Integer pageNum, Integer pageSize, @Param("id") Integer id);

    /**
     * 根据关键字查询商品
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MallProductInfoNew> search(@Param("keyword") String keyword, Integer pageNum, Integer pageSize);

    /**
     * 查询商品详情（新实体类）
     * @param mallProductInfoNew
     * @return
     */
    List<MallProductInfoNew> selectMallProductInfoNewList(MallProductInfoNew mallProductInfoNew);

    /**
     * 新鲜好物分页列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MallProductInfoNew> newProductList(Integer pageNum, Integer pageSize);


    /**
     * 清空关注列表
     * @param id
     */
    void clear(@Param("id") Integer id);

}
